package com.gzz.manage.sys.func;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @类说明 【功能菜单】业务逻辑层
 * @author 高振中
 * @date 2020-11-10 23:19:07
 **/
//@Slf4j
@Service
public class FuncService {

	@Autowired
	private FuncDao funcDao; // 注入【功能菜单】数据访问层

	/**
	 * @方法说明 【功能菜单】新增
	 */
	public int save(Func func) {
		if (!func.getParentId().equals(0))
			funcDao.updateParentSave(func.getParentId());
		return funcDao.save(func);
	}

	/**
	 * @方法说明 【功能菜单】删除
	 */
	public int delete(Object[] ids) {
		List<Func> funcs = funcDao.list(Func.class, FuncCond.builder().ids(ids).build());
		int count = funcDao.delete(Func.class, ids);
		funcs.forEach(func -> funcDao.updateParentDelete(func.getParentId()));
		return count;
	}

	/**
	 * @方法说明 【功能菜单】更新
	 */
	public int update(Func func) {
		return funcDao.update(func);
	}

	/**
	 * @方法说明 【功能菜单】列表
	 */
	public List<Func> list(FuncCond cond) {
		return funcDao.list(Func.class, cond);
	}

	/**
	 * @方法说明 【功能菜单】树
	 */
	public List<Func> tree(Object[] ids) {
		List<Func> funcs = funcDao.list(Func.class, FuncCond.builder().ids(ids).type((byte) 1).build());
		Map<Integer, Func> treeMap = new HashMap<>();
		List<Func> treeList = new ArrayList<>();
		for (Func func : funcs) {
			treeMap.put(func.getFuncId(), func);
			if (func.getParentId() == 0) {
				treeList.add(func);
			} else {
				if (treeMap.get(func.getParentId()).getChildren() == null)
					treeMap.get(func.getParentId()).setChildren(new ArrayList<>());
				treeMap.get(func.getParentId()).getChildren().add(func);// children
			}
		}
		treeMap.clear();
		return treeList;
	}

	/**
	 * @方法说明 【功能菜单】个数
	 */
	public int count(FuncCond cond) {
		return funcDao.count(Func.class, cond);
	}
}